import os
import argparse
    
def compare( file1 , file2 ) :
    with open(file1,'rb') as f1,open(file2,'rb') as f2 :
        content1 = f1.read()
        content2 = f2.read()
    
    if content1 == content2 :
        return True
    return False

def get_file_status(file_path):
    # 根据相对位置获取文件在版本库中的路径（因为没有具体的文件信息所以先草拟了几个版本库我设定的相对位置为.git\Staged, .git\Committed, .git\Modified）
    staged_path = os.path.join('.git', 'Stage', file_path)
    committed_path = os.path.join('.git', 'Repository', file_path)
    modified_path = file_path

    # 先检查Staged文件夹中是否有相同文件
    if os.path.exists(staged_path):
        #先检查是否修改过
        if compare(file_path,staged_path) :
            return "Modified"
        return "Staged"

    # 再检查Committed文件夹中是否有相同文件
    if os.path.exists(committed_path):
        if compare(file_path,committed_path) :
            return "Modified"
        return "Committed"

    # 既不在暂存区也不在版本库，文件未跟踪
    return "Untracked"

def git_status(directory):
    for root, dirs, files in os.walk(directory):
        if ".git" in dirs :
            dirs.remove(".git")
        for file in files:
            file_path = os.path.join(root, file)
            status = get_file_status(file_path)
            print(f"{file_path}: {status}")

# 创建命令行解析器
parser = argparse.ArgumentParser(description="Git status-like file status")
parser.add_argument('-s',"--status",action='store_true',help="the directory to check (default: current directory)")

# 解析命令行参数
args = parser.parse_args()

# 执行git status操作
if args.status :
    git_status('.')